<?php

namespace app\common\model;

use think\facade\Db;

/**
 * 成果分析操作公共类
 * 
 * 时间 ： 2020年4月18日00:18:03
 * 作者 ： 夏立军
 */
class AchievementAnalysisModel
{

    /**
     * 统计所有的成果表的内容
     * 
     * @return [分类名称，数量]
     */
    public function get_achievement_analysis_data()
    {
        try {
            $res = Db::name('classify')->where('issue', 1)->where('flag', 2)->select();

            $res_data = array();
            foreach ($res as $row) {
                // 获取cid
                $cid = $row['id'];

                // 获取表名
                $table_name = Db::name('classify_table')
                    ->where('cid', $cid)->field('table_name')
                    ->find();

                // 通过表名获取所有的数据
                try {
                    $classify_table_other_count =  Db::table($table_name['table_name'])->where('status', 4)->count();
                } catch (\Throwable $th) {
                    return redirect_index('数据异常，请联系管理员', url('Index/index'));
                }

                // 为 0 的则不统计
                if ($classify_table_other_count > 0) {
                    $res_data['name'][] = $row['name'];
                    $res_data['count'][] = $classify_table_other_count;
                }
            }
        } catch (\Throwable $th) {
            return false;
        }
        return $res_data;
    }


    /**
     * 获取自己的成果已通过的数量
     * @param $uid 用户ID
     * @return 返回个人统计数据
     */
    public function get_achievement_analysis_data_by_uid(int $uid)
    {
        try {
            $res = Db::name('classify')->where('issue', 1)->where('flag', 2)->select();

            $res_data = array();
            foreach ($res as $row) {
                // 获取cid
                $cid = $row['id'];

                // 获取表名
                $table_name = Db::name('classify_table')
                    ->where('cid', $cid)->field('table_name')
                    ->find();

                // 通过表名获取所有的数据
                try {
                    $classify_table_other_count =  Db::table($table_name['table_name'])
                        ->where('uid', $uid)
                        ->where('status', 4)
                        ->count();
                } catch (\Throwable $th) {
                    return redirect_index('数据异常，请联系管理员', url('Index/index'));
                }

                // // 为 0 的则不统计
                if ($classify_table_other_count > 0) {
                    $res_data['name'][] = $row['name'];
                    $res_data['count'][] = $classify_table_other_count;
                }
            }
        } catch (\Throwable $th) {
            return false;
        }
        return $res_data;
    }

    /**
     * 获取总量以及已通过分布图
     * @param $uid 用户ID
     * @return 结果
     */
    public function get_achievement_analysis_user_data_by_uid(int $uid)
    {
        try {
            $res = Db::name('classify')->where('issue', 1)->where('flag', 2)->select();

            $res_data = array();
            foreach ($res as $row) {
                // 获取cid
                $cid = $row['id'];

                // 获取表名
                $table_name = Db::name('classify_table')
                    ->where('cid', $cid)->field('table_name')
                    ->find();

                // 通过表名获取所有的数据
                try {
                    // 总量
                    $classify_table_other =  Db::table($table_name['table_name'])
                        ->where('uid', $uid)
                        ->select();

                    // 总量
                    $classify_table_other_all_count = count($classify_table_other);
                    // 已通过
                    $through_count = 0;
                    // 审核中
                    $auditing = 0;

                    foreach ($classify_table_other as $cto) {
                        if ($cto['status'] == 4) {
                            $through_count++;
                        }
                        if ($cto['status'] == 1) {
                            $auditing++;
                        }
                    }
                } catch (\Throwable $th) {
                    return redirect_index('数据异常，请联系管理员', url('Index/index'));
                }

                // // 为 0 的则不统计
                if ($classify_table_other_all_count > 0) {
                    $res_data['name'][] = $row['name'];
                    $res_data['count'][] = $classify_table_other_all_count;
                    $res_data['through_count'][] = $through_count;
                    $res_data['auditing_count'][] = $auditing;
                }
            }
        } catch (\Throwable $th) {
            return false;
        }
        return $res_data;
    }
}
